package com.bw.base.utils

import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Observer
import java.util.concurrent.atomic.AtomicBoolean
//解决数据倒灌
class SingleLiveData<T>:MutableLiveData<T>() {
    //重写两个方法:1.给数据赋值方法;2.观察数据方法
    //怎样将数据变成单一的  加标志位 flag true 是最新的且没有处理过   false 已经被处理过的
    private var flag =AtomicBoolean(false)//具有原子性  多线程也能确保唯一性
    override fun postValue(value: T) {
        flag.set(true)
        super.postValue(value)
    }

    override fun observe(owner: LifecycleOwner, observer: Observer<in T>) {
//        super.observe(owner, observer) 删掉 ,observer   后面加{判断}
        super.observe(owner){
            if(flag.compareAndSet(true,false)){
                observer.onChanged(it)
            }
        }
    }
}